package persistencia.dao;


import org.hibernate.Query;
import persistencia.hbt.HibernateUtil;
import bean.EntidadPersistente;
import bean.Fabricante;
import bean.Pais;
import bean.Producto;
import bean.Rodamiento;

public class ProductoDAO extends EntidadPersistenteDAO {
	private static ProductoDAO instancia = null;
	
	public static ProductoDAO getInstancia(){
		if(instancia == null)
			instancia = new ProductoDAO();
		
		if (session == null)
			session = HibernateUtil.getSession();
		
		return instancia;
	}
	
	public Producto buscar(EntidadPersistente entidad){
		Producto prod = (Producto) entidad;
		
		if (prod.getId() != null)
			return (Producto) super.buscar(prod);
		else if (prod.getRodamiento() != null && prod.getOrigen() != null && prod.getFabricante() != null)
			return this.buscar(prod.getRodamiento(), prod.getOrigen(), prod.getFabricante());
		
		return null;
	}
	
	private Producto buscar(Rodamiento r, Pais p, Fabricante f){

		String queryString = "from Producto p where p.rodamiento = :rod and p.origen = :ori and p.fabricante = :fab";
		Query query = session.createQuery(queryString);
		query.setEntity("rod", r);
		query.setEntity("ori", p);
		query.setEntity("fab", f);
		Producto prod = (Producto) query.setFirstResult(0).setMaxResults(1).uniqueResult();

		return prod;
	}
}
